As computers become more advanced, software developers are increasingly creating applications that are capable of simultaneously performing multiple tasks. These multi-threaded applications are typically more powerful than conventional applications. In developing multi-threaded applications, software developers often have to implement features to resolve problems that are unique to a multi-threaded operating environment. For example, software developers of multi-threaded applications must implement some locking techniques to ensure that an object is safely shared across multiple threads of execution. Conventional locking techniques typically rely on the operating system to manage the sharing of objects. However, these conventional locking techniques require a large amount of system overhead just to support the sharing of objects. Thus, there is a need for an object locking mechanism that provides a reliable environment for multi-threaded applications while reducing the necessary system overhead.